package util

import (
	"fmt"
	"github.com/spf13/viper"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"log"
	"os"
	"time"
)

/**
 * @Description
 * @Date 2023/5/15 周一 16:02
 * @Author Tang-J-L <vx：17685112557>
 */

var DB *gorm.DB

// ConfigInit 系统初始化配置
func ConfigInit() {
	viper.SetConfigName("config")
	viper.SetConfigType("yml")
	// 建表时读取
	// viper.AddConfigPath("../config")
	viper.AddConfigPath("config")
	err := viper.ReadInConfig()
	if err != nil {
		panic(fmt.Errorf("无法读取系统初始化配置文件: %w", err))
	}
	fmt.Println("系统初始化完成！！！")
}

// MySQLInit MySql初始化配置
func MySQLInit() {
	user := viper.GetString("mysql.user")
	password := viper.GetString("mysql.password")
	host := viper.GetString("mysql.host")
	port := viper.GetString("mysql.port")
	DBName := viper.GetString("mysql.db")
	timeout := viper.GetString("mysql.timeout")

	// 自定义日志模板，打印sql日志
	sqlLog := logger.New(
		log.New(os.Stdout, "\r\n", log.LstdFlags),
		logger.Config{
			SlowThreshold: time.Second, // 慢sql阈值
			LogLevel:      logger.Info, // 级别
			Colorful:      true,        // 彩色
		},
	)

	dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local&timeout=%s", user, password, host, port, DBName, timeout)
	// 连接MYSQL, 获得DB类型实例，用于后面的数据库读写操作。
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
		Logger:                 sqlLog, // 开启日志
		SkipDefaultTransaction: true,   // 跳过事务
	})
	if err != nil {
		panic("连接mysql数据库失败, error=" + err.Error())
	}
	// 连接成功
	fmt.Println("连接mysql成功：", db)
	DB = db
}
